<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Classe que controla tipos_campanhas
 * 
 * @package controllers.campanhas.tipos_campanhas
 * @category controllers
 * @name tipos_campanhas.php
 * @author Davi Gomes <davigomess@gmail.com>
 * @version 1.0
 * @since 07/05/2011
 */
class Tipos_campanhas extends CI_Controller
{
    /**
         * Nome da tabela
         * 
         * @access private
         * @var $_table string
         */
        private $_table = "tipos_campanhas";
        
        /**
         * Chave PK da tabela
         * 
         * @access private
         * @var $_pk string
         */
        private $_pk    = "id_tipo_campanha";
        
        /**
         * Construtor da classe Tipos
         * @access public
         */
        public function __construct()
        {
                parent::__construct();
                if (!$this->session->userdata('loggedin'))
                {
                        redirect(base_url(), 'refresh');
                }
                else 
                {
                    $actions = $this->session->userdata('v_actions');
                    
                    if (!array_key_exists("tipos_campanhas", $actions))
                    {
                            redirect(base_url(), 'refresh');
                    }
                }
        }
    	
    	/**
         * Metodo que exibe a tela de tipos_campanhas
         * @access public
         */
        public function index()
        {
                //Chamada da tela de tipos_campanhas
                $this->load->view('common/header');
                $this->load->view('common/menu');
                $this->load->view('campanhas/tipos');
                $this->load->view('common/footer');
        }

		/**
         * Metodo que exibe a grid com os setores
         * @access public
         */
        public function listAll()
        {
            parse_str($_SERVER['QUERY_STRING'],$_GET);
                //Cria um objeto de pesquisa padrao para selecionar apenas os tipos_campanhas nao excluidos
                $objSearch = null;
                
                $objSearch->groupOp = "AND";
                $objSearch->rules[0]->field = "flag_deletado";
                $objSearch->rules[0]->op = "eq";
                $objSearch->rules[0]->data = "N";
                
                //Verifica se algum parametro foi passado pelo filtro
                if(isset($_REQUEST['filters']) && !is_null($_REQUEST['filters']) && !empty($_REQUEST['filters']))
                {
                        $objSearch = json_decode(stripslashes($_REQUEST['filters']));
                }

                //Seta a paginacao de acordo com o que foi passado pela grid
                $data['page'] = isset($_GET['page'])?$_GET['page']:1;
                
                //Seta o numero de linhas de acordo com o que foi passado pela grid
                $data['rows'] = isset($_GET['rows'])?$_GET['rows']:10;
                
                //Seta o campo que sera usado como indice da tabela
                $data['sidx'] = isset($_GET['sidx'])?$_GET['sidx']:'id_tipo_campanha';
                
                //Seta o campo que ira ordenar a grid
                $data['sord'] = isset($_GET['sord'])?$_GET['sord']:'';
                
                //Executa o comando que retorna os registro de acordo com o que foi passado no filtro
                $dados['tipos_campanhas'] = $this->generic_model->getByFilterPaging($objSearch, $this->_table, $data);
                
                //Cria o objeto que retornara no formato JSON
                $responce = null;
                
                //Seta a paginacao da grid
                $responce->page = $dados['tipos_campanhas']['page'];
                
                //Seta o total de paginas da grid
                $responce->total = $dados['tipos_campanhas']['totalpages'];
                
                //Seta o total de registro na grid
                $responce->records = $dados['tipos_campanhas']['totalrecords'];
                
                //Variavel que ira controlar o indice do array
                $i = 0;
                foreach ($dados['tipos_campanhas']['result'] as $row)
                {
                        //Formata o objeto response no padrao JSON
                        $responce->rows[$i]['id']=$row->id_tipo_campanha;
                $responce->rows[$i]['cell']=array($row->id_tipo_campanha, $row->descricao, $row->flag_ativo);
                $i++;
                }
                //Retorna o objeto JSON para grid
                echo json_encode($responce);
        }
		
		/**
         * Metodo que salva o tipo
         * @access public
         */
        public function save()
        {
                //Seta o array de campos que serao validados no PHP
                //Todos os campos do formulario devem ser especificados nos arrays
                //O elemento field deve conter o mesmo name do objeto HTML, esse elemento eh similar ao $_POST['name']
                //O elemento label deve conter o label que eh exibido no formulario
                //O elemento rules deve conter todas as regras que devem ser validadas no PHP pelo CI
                $config = array(
                        array(
                                'field' => "descricao",
                                'label' => "Descri&ccedil;&atilde;o",
                                'rules' => "trim|required|min_length[1]|max_length[250]|xss_clean"
                        ),
                        array(
                                'field' => "flag_ativo",
                                'label' => "Tipo Ativo?",
                                'rules' => "trim|min_length[1]|max_length[1]|xss_clean"
                        )
                );
                
                //Metodo que seta as regras especificadas acima
                $this->form_validation->set_rules($config);
                
                //Executa a verificacao das regras
                if ($this->form_validation->run() == FALSE)
                {
                        //Caso aconteca algum erro o metodo index eh chamado e a mensagem de erro eh retornada via AJAX
                        echo "err#".validation_errors();
                        exit;
                }
                else
                {       
                        //Apos passar pela verificacao a variavel action recebe o elemento hid_oper que pode ser add ou upd identificando a acao a ser tomada
                        $action = $this->input->post('hid_oper');
                        
                        //A variavel data eh um array onde seus indices devem conter exatamente o mesmo nome da coluna no banco de dados
                        $data['descricao'] = $this->input->post('descricao');
                        $data['flag_ativo'] = $this->input->post('flag_ativo');
                        switch ($action)
                        {
                                //Caso seja uma adicao
                                case "add":
                                        //O CI tenta inserir os valores informados
                                        if ($this->generic_model->insert($data, $this->_table))
                                        {
                                                //Estando OK o metodo index eh chamado e a mensagem de sucesso eh retornada via AJAX
                                                echo "oks#Tipo inserido com sucesso!";
                                        }
                                        else 
                                        {
                                                //Se acontecer algum erro na insercao uma mensagem de erro eh retornada via AJAX
                                                echo "err#Erro na inser&ccedil;&atilde;o do Tipo";
                                        }                               
                                        break;
                                //Caso seja uma atualizacao
                                case "upd":
                                        //A variavel data recebe o ID a ser atualizado
                                        $data['id_tipo_campanha'] = $this->input->post('id_tipo_campanha', TRUE);
                                    
                                        //O CI tenta atualizar os valores informados
                                        if($this->generic_model->update($data, $this->_table, $this->_pk))
                                        {
                                                //Estando OK o metodo index eh chamado e a mensagem de sucesso eh retornada via AJAX
                                                echo "oks#Tipo atualizado com sucesso!";
                                        }
                                        else 
                                        {
                                                //Se acontecer algum erro na atualizacao uma mensagem de erro eh retornada via AJAX
                                                echo "err#Erro na atualiza&ccedil;&atilde;o do Tipo";
                                        }
                                        break;
                        }
                        exit;
                }
        }

        /**
         * Metodo que retorna o objeto funcionalidade pelo ID
         * @access public
         */
        public function getById()
        {
                //A variavel data recebe o ID do tipo a ser retornado
                $data['id_tipo_campanha'] = $this->input->post('id');
                
                //A variavel dados recebe um objeto retornado pelo metodo getById
                $dados['tipo'] = $this->generic_model->getById($data, $this->_table, $this->_pk);
                
                //Indice que controla o array
                $i = 0;
                
                //Cria o objeto response
                $responce = null;
                foreach ($dados['tipo'] as $row)
                {
                        //Formata o objeto response para o formato JSON
                        $responce->rows[$i]['id_tipo_campanha']=$row->id_tipo_campanha;
                $responce->rows[$i]['cell']=array($row->id_tipo_campanha, $row->descricao, $row->flag_ativo);
                $i++;
                }
                //Retorna o objeto JSON
                echo json_encode($responce);
        }
        
        /**
         * Metodo que exclui virtualmente o tipo
         * @access public
         */
        public function delete()
        {
                //A variavel data recebe o ID da origem a ser excluido
                $data['id_tipo_campanha'] = $this->input->post('id');
                
                //Atribui S a flagDeletado
                $data['flag_deletado'] = "S";
                
                //O CI tenta atualizar o registro com os parametros informados
                if($this->generic_model->update($data, $this->_table, $this->_pk))
                {
                        //Estando OK a mensagem de sucesso eh retornada via AJAX
                        echo "oks#Tipo exclu&iacute;do com sucesso!";
                }
                else
                {
                        //Se acontecer algum erro na atualizacao uma mensagem de erro eh retornada via AJAX
                        echo "err#Erro na exclus&atilde;o do Tipo";
                }
                exit;
        }       
}